﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ahi.Controller;
using Ahi.Entity.Enums;
using Ahi.Entity;
using Ahi.IsArama;

namespace Ahi.PersonelArama
{
    public partial class PersonelArayanDuzenleForm : Base.DuzenleBaseForm
    {
        PersonelArayanEntity entity;

        public IsArayanEntity CurrentIsArayan
        {
            get
            {
                if (bsIsArayanlar.Current is IsArayanEntity)
                    return bsIsArayanlar.Current as IsArayanEntity;
                return null;
            }
        }

        public PersonelArayanDuzenleForm()
        {
            InitializeComponent();
        }

        public override void Hazirla()
        {
            cinsiyetLookUpEdit.SetEnumList<Cinsiyet>();
            medeniHalLookUpEdit.SetEnumList<MedeniHaller>();
            minimumIsDeneyimiLookUpEdit.SetEnumList<IsDeneyimi>();
            minimumMezuniyetLookUpEdit.SetEnumList<MezuniyetSeviyeleri>();
            askerlikDurumuLookUpEdit.SetEnumList<AskerlikDurumlari>();
            yabanciDilLookUpEdit.SetEnumList<YabanciDiller>();
        }

        public override void YeniKayit()
        {
            entity = bsData.AddNew() as PersonelArayanEntity;
        }

        public override void KayitYukle(Base.IdFormParameter Id)
        {
            entity = MongoAdaptor.Instance.GetDataById<PersonelArayanEntity>(Id.AsObjectId);
        }

        public override void YuklediktenSonraCalistir()
        {
            bsData.DataSource = entity;
            if (!Id.HasValue)
            {
                entity.Cinsiyet = Cinsiyet.Erkek;
                entity.Il = "İstanbul";
                entity.MedeniHal = MedeniHaller.Belirsiz;
                entity.MinimumIsDeneyimi = IsDeneyimi._0__1_Yil;
                entity.MinimumMezuniyet = MezuniyetSeviyeleri.Lise;
                entity.PersonelSayisi = 1;
                entity.YabanciDil = YabanciDiller.Ingilizce;
                entity.YabanciDilAktifKullanilacakMi = false;
                bsData.ResetBindings(false);
            }
        }

        public override void Kaydet()
        {
            MongoAdaptor.Instance.Save<PersonelArayanEntity>(entity);
            Close();
        }

        private void buttonIsArayanlariBul_Click(object sender, EventArgs e)
        {
            Bul();
        }

        private void Bul()
        {
            var isArayanlar = MongoAdaptor.Instance.GetDataByField<IsArayanEntity>("IsArayisiVarMi", true);

            if (entity.Cinsiyet != Cinsiyet.Bilinmiyor)
                isArayanlar = isArayanlar.Where(x => x.Cinsiyet == Cinsiyet.Bilinmiyor || x.Cinsiyet == entity.Cinsiyet).ToList();

            if (entity.EhliyetGerekli)
                isArayanlar = isArayanlar.Where(x => !string.IsNullOrEmpty(x.Ehliyet) && x.EhliyetAktif).ToList();

            if (!string.IsNullOrEmpty(entity.Il))
                isArayanlar = isArayanlar.Where(x => string.IsNullOrEmpty(x.Il) || x.Il == entity.Il).ToList();

            if (!string.IsNullOrEmpty(entity.Ilce))
                isArayanlar = isArayanlar.Where(x => string.IsNullOrEmpty(x.Ilce) || x.Ilce == entity.Ilce).ToList();

            if (entity.MedeniHal != MedeniHaller.Belirsiz)
                isArayanlar = isArayanlar.Where(x => x.MedeniHal == MedeniHaller.Belirsiz || x.MedeniHal == entity.MedeniHal).ToList();

            isArayanlar = isArayanlar.Where(x => x.IsDeneyimi >= entity.MinimumIsDeneyimi).ToList();

            if (entity.MaasMiktari > 0)
                isArayanlar = isArayanlar.Where(x => x.MaasBeklentisi <= entity.MaasMiktari).ToList();

            isArayanlar = isArayanlar.Where(x => x.Mezuniyet >= entity.MinimumMezuniyet).ToList();

            if (entity.AskerlikDurumu != AskerlikDurumlari.Belirsiz)
                isArayanlar = isArayanlar.Where(x => x.AskerlikDurumu >= entity.AskerlikDurumu).ToList();

            if (entity.YabanciDilAktifKullanilacakMi)
                isArayanlar = isArayanlar.Where(x => 
                    x
                    .YabanciDiller
                    .Where(y=> y.Dil == entity.YabanciDil)
                    .Count() > 0).ToList();

            bsIsArayanlar.DataSource = isArayanlar;
        }

        private void gridViewIsArayan_DoubleClick(object sender, EventArgs e)
        {
            if (CurrentIsArayan == null) return;
            IsArayanDuzenleForm frm = new IsArayanDuzenleForm();
            frm.Id = CurrentIsArayan.Id;
            frm.ShowDialog();
        }
    }
}
